package algorithm.leetcode.medium;

/*
 给定一个正整数 n，将其拆分为至少两个正整数的和，并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
 */

/**
 * @author jack.wu
 * @version 1.0
 * @date 2021/1/7
 */
public class Question343 {

    public static void main(String[] args) {

    }

    /**
     * 思路：动态规划
     * 转移式方程：dp[i] = max(j×(i−j),j×dp[i−j])
     */
    public int integerBreak(int n) {
        int[] dp = new int[n + 1];
        for (int i = 2; i <= n; i++) {
            int curMax = 0;
            for (int j = 1; j < i; j++) {
                curMax = Math.max(curMax, Math.max(j * (i - j), j * dp[i - j]));
            }
            dp[i] = curMax;
        }
        return dp[n];
    }
}
